var Stream = require('node-rtsp-stream')
const express = require('express');
const cors = require("cors");
const app = express();
const checkUrl = [] //保存rtsp路径
const rtspJson = [] //保存整个stream对象 url RTSP流地址 port ws端口号 time 时间戳 stope 当前stream是否停用

app.use(cors()); //解决跨域问题
app.get('/rtspData', function(req, res) {
  	// 直接返回对象
	if(checkUrl.indexOf(req.query.rtspUrl) == -1){
		//记录rtsp路径
		checkUrl.push(req.query.rtspUrl)
		var port = Math.floor(Math.random() * (4001 - 3001) + 3001) //随机生成端口号
		// 创建直播流
		let target = new Stream({
			name: 'socket',
			streamUrl: req.query.rtspUrl,//这里是你要链接大华或者海康的rtsp协议的摄像头地址
			wsPort: port,//这里就是webscoket的端口
			ffmpegOptions: {//这部分是ffmpeg的配置，当构造完成，会自动寻找ffmpeg程序
				'-stats': '',
				'-r': 20
			}
		})
		//组装整个对象
		var streamJson = {
			url: req.query.rtspUrl,
			stream: target,
			port: port,
			time: Date.now(),
			stop: false
		}
		rtspJson.push(streamJson)
		//给前端发送端口号
		res.send({ data: port });
		return
	}else{
		for(var q = 0; q < rtspJson.length; q ++){
			//当前端传给node的rtsp路径存在的时候
			if(rtspJson[q].url == req.query.rtspUrl){
				//重新开启流
				rtspJson[q].time = Date.now()
				if(rtspJson[q].stop){
					rtspJson[q].stream = new Stream({
						name: 'socket',
						streamUrl: req.query.rtspUrl,//这里是你要链接大华或者海康的rtsp协议的摄像头地址
						wsPort: rtspJson[q].port,//这里就是webscoket的端口
						ffmpegOptions: {//这部分是ffmpeg的配置，当构造完成，会自动寻找ffmpeg程序
							'-stats': '',
							'-r': 20
						}
					})
				}
				rtspJson[q].stop = false
				//给前端发送端口号
				res.send({ data: rtspJson[q].port });
			} else if((rtspJson[q].time+10000) < Date.now()) {
				//当前时间戳超过创建时间戳10s，那就认为当前这个直播流没有在观看，需要关闭
				rtspJson[q].stream.stop()
				rtspJson[q].stop = true
			}
		}
		console.log(rtspJson)
	}
});
// 监听前端请求地址带8001端口的get请求
app.listen('8001', () => {
	
})

